#ifndef ORDERCONTROLWIDGET_H
#define ORDERCONTROLWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QComboBox>
#include <QDateEdit>
#include <QPushButton>
#include <QLabel>
#include <QGroupBox>
#include <QTimer>
#include "models.h"
#include "ordermanager.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 订单操作控制组件
 * 
 * 提供订单搜索、过滤和操作控制功能：
 * - 搜索框和过滤器
 * - 订单状态变更操作
 * - 刷新和导出功能
 * - 快速操作按钮
 */
class OrderControlWidget : public QWidget
{
    Q_OBJECT

public:
    explicit OrderControlWidget(QWidget *parent = nullptr);
    ~OrderControlWidget();

    /**
     * @brief 设置当前选中的订单
     * @param order 当前订单
     */
    void setCurrentOrder(const Order& order);
    
    /**
     * @brief 清空当前订单
     */
    void clearCurrentOrder();
    
    /**
     * @brief 设置搜索条件
     * @param criteria 搜索条件
     */
    void setSearchCriteria(const OrderSearchCriteria& criteria);

signals:
    /**
     * @brief 搜索条件变更信号
     * @param criteria 新的搜索条件
     */
    void searchCriteriaChanged(const OrderSearchCriteria& criteria);
    
    /**
     * @brief 状态变更请求信号
     * @param orderId 订单ID
     * @param newStatus 新状态
     */
    void statusChangeRequested(const QString& orderId, OrderStatus newStatus);
    
    /**
     * @brief 刷新请求信号
     */
    void refreshRequested();
    
    /**
     * @brief 导出请求信号
     */
    void exportRequested();
    
    /**
     * @brief 删除订单请求信号
     * @param orderId 订单ID
     */
    void deleteOrderRequested(const QString& orderId);

private slots:
    /**
     * @brief 搜索文本变更槽
     */
    void onSearchTextChanged();
    
    /**
     * @brief 状态过滤变更槽
     */
    void onStatusFilterChanged();
    
    /**
     * @brief 日期范围变更槽
     */
    void onDateRangeChanged();
    
    /**
     * @brief 开始制作按钮点击槽
     */
    void onStartPreparingClicked();
    
    /**
     * @brief 完成订单按钮点击槽
     */
    void onCompleteOrderClicked();
    
    /**
     * @brief 取消订单按钮点击槽
     */
    void onCancelOrderClicked();
    
    /**
     * @brief 删除订单按钮点击槽
     */
    void onDeleteOrderClicked();
    
    /**
     * @brief 刷新按钮点击槽
     */
    void onRefreshClicked();
    
    /**
     * @brief 导出按钮点击槽
     */
    void onExportClicked();
    
    /**
     * @brief 搜索延迟定时器超时槽
     */
    void onSearchDelayTimeout();

private:
    /**
     * @brief 设置搜索区域
     */
    void setupSearchArea();
    
    /**
     * @brief 设置操作区域
     */
    void setupActionArea();
    
    /**
     * @brief 更新操作按钮状态
     */
    void updateActionButtons();
    
    /**
     * @brief 构建搜索条件
     * @return 搜索条件对象
     */
    OrderSearchCriteria buildSearchCriteria();
    
    /**
     * @brief 发射搜索条件变更信号
     */
    void emitSearchCriteriaChanged();
    
    /**
     * @brief 获取日期范围
     * @param rangeIndex 范围索引
     * @return QPair<开始日期, 结束日期>
     */
    QPair<QDateTime, QDateTime> getDateRange(int rangeIndex);

private:
    // 主布局
    QVBoxLayout* m_mainLayout;
    
    // 搜索区域
    QGroupBox* m_searchGroup;
    QGridLayout* m_searchLayout;
    QLineEdit* m_searchLineEdit;
    QComboBox* m_statusFilterCombo;
    QComboBox* m_dateRangeCombo;
    QDateEdit* m_startDateEdit;
    QDateEdit* m_endDateEdit;
    QLabel* m_searchStatusLabel;
    
    // 操作区域
    QGroupBox* m_actionGroup;
    QHBoxLayout* m_actionLayout;
    QPushButton* m_startPreparingButton;
    QPushButton* m_completeOrderButton;
    QPushButton* m_cancelOrderButton;
    QPushButton* m_deleteOrderButton;
    QPushButton* m_refreshButton;
    QPushButton* m_exportButton;
    
    // 当前状态
    Order m_currentOrder;
    OrderSearchCriteria m_currentCriteria;
    bool m_hasCurrentOrder;
    
    // 搜索延迟定时器
    QTimer* m_searchDelayTimer;
    
    // 常量
    static const int SEARCH_DELAY_MS = 300; // 搜索延迟300ms
};

#endif // ORDERCONTROLWIDGET_H
